/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package logic.grafos;

/**
 *
 * @author Jose Gabriel Rivera
 */
class Nodo implements java.io.Serializable{
    Object info;
    Nodo siguiente;
    NodoAdyacencia adyacencias;

    public Nodo(Object info) {
      this.info = info;
      this.siguiente = null;
      this.adyacencias = null;
    }

    public Nodo(Object info, Nodo siguiente) {
      this.info = info;
      this.siguiente = siguiente;
      this.adyacencias = null;
    }

    public Nodo getSiguiente() {
      return siguiente;
    }

    public void setSiguiente(Nodo siguiente) {
      this.siguiente = siguiente;
    }


    public Object getInfo() {
      return info;
    }

    public void setInfo(Object info) {
      this.info = info;
    }

    public NodoAdyacencia getAdyacencias() {
      return adyacencias;
    }

    /**
     * Añadir Arista
     */
    public void añadirArista(Nodo nodo, int peso){
      /**
       * Añadir al final de la lista de adyacencias
       */
        NodoAdyacencia nodoAux = this.adyacencias;

        if(this.adyacencias==null){
            this.adyacencias = new NodoAdyacencia(nodo,peso);
            return;
        }

        while(nodoAux.siguiente!=null){
            nodoAux=nodoAux.siguiente;
        }
        nodoAux.siguiente = new NodoAdyacencia(nodo,peso);
    }
    
    public void añadirArista(Nodo nodo, int peso, int pesoAux){
      /**
       * Añadir al final de la lista de adyacencias
       */
        NodoAdyacencia nodoAux = this.adyacencias;

        if(this.adyacencias==null){
            this.adyacencias = new NodoAdyacencia(nodo,peso,pesoAux);
            return;
        }

        while(nodoAux.siguiente!=null){
            nodoAux=nodoAux.siguiente;
        }
        nodoAux.siguiente = new NodoAdyacencia(nodo,peso, pesoAux);
    }    
    
    /**
    * eliminar Arista
    */
    public boolean eliminarArista(Nodo nodo, int peso){
      /**
       * Eliminar arista si existe
       */
        NodoAdyacencia nodoAux = this.adyacencias;

        if(nodoAux==null)
            return false;

        while(nodoAux.info!=nodo && nodoAux.peso!=peso){
            nodoAux = nodoAux.siguiente;
            if(nodoAux.siguiente==null)
                return false; 
        }

        nodoAux.siguiente = nodoAux.siguiente.siguiente;
        return true;
    }

}
